<?php

//tailvh@gmail.com

//Require model files
require_once ROOT_APPLICATION_MODULES_DEFAULT_MODELS . DS . 'Product.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_MODELS . DS . 'Productoption.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_MODELS . DS . 'Productoptionvalue.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_MODELS . DS . 'Productoptionvalueoption.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_MODELS . DS . 'Productattribute.php';
//Require objects files
require_once ROOT_APPLICATION_MODULES_DEFAULT_OBJECTS . DS . 'Product.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_OBJECTS . DS . 'Productoption.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_OBJECTS . DS . 'Productoptionvalue.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_OBJECTS . DS . 'Productoptionvalueoption.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_OBJECTS . DS . 'Productattribute.php';
//Require forms files
require_once ROOT_APPLICATION_MODULES_DEFAULT_FORMS . DS . 'Product.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_FORMS . DS . 'Productoption.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_FORMS . DS . 'Productoptionvalue.php';
require_once ROOT_APPLICATION_MODULES_DEFAULT_FORMS . DS . 'Productaddinfo.php';

class ProductoptionController extends Zend_Controller_Action {

    ///////////////////////
    // V A R I A B L E S //
    ///////////////////////
    private  $modelProduct;
    private  $modelProductoption;
    private  $modelProductoptionvalue; 
    private  $modelProductoptionvalueoption;
    private  $modelProductattribute;
    private $_redirector;
    
    /////////////////////
    // O V E R I D E S //
    /////////////////////

    public function preDispatch() {

    }

    public function init() {
        $layoutPath = APPLICATION_PATH . '/templates/default';
        $option = array('layout' => 'index',
        'layoutPath' => $layoutPath);
        
        Zend_Layout::startMvc($option);
        $this->modelProduct = new End_Models_Product(); 
        $this->modelProductoption = new End_Models_Productoption();
        $this->modelProductoptionvalue = new End_Models_Productoptionvalue();
        $this->modelProductoptionvalueoption = new End_Models_Productoptionvalueoption(); 
        $this->modelProductattribute = new End_Models_Productattribute();
        $this->_redirector = $this->_helper->getHelper('Redirector');
   }

    ///////////////////////
    // U T I L I T I E S //
    ///////////////////////
   
        
    ///////////////////
    // A C T I O N S //
    ///////////////////
    //INDEX ACTION
    public function indexAction() { 
        $tmpArrProductoption = $this->modelProductoption->fetchAll();
        $this->view->arrProductOption = $tmpArrProductoption; 
    }

    public function addAction(){ 
        $formProductoption = new Application_Form_Productoption();
  
        if ($this->getRequest()->isGet()) { 
            $formProductoption->product_option_id->setValue($Productoption_id);
        } else {
            $Cancel = $this->getRequest()->getPost('cancel', '0');
            if ($Cancel) {
                $this->_redirector->gotoUrl('productoption/index');
            }
            
            $formData = $this->getRequest()->getPost();
            if ($formProductoption->isValid($formData)) { 

                $Productoption = new Productoption( null, $formData['product_option_name']);
            
                $id = $this->modelProductoption->_insert($Productoption);
                
                $this->_redirector->gotoUrl('productoption/index');
            } else { 
                $formProductoption->populate($formData);
            }
        }
        $this->view->form = $formProductoption;
    }
    
    public function deleteAction(){
        $id = $this->_getParam('id','0');
        $Productoption = $this->modelProductoption->_find($id);
        if(isset($Productoption))
        {
            $this->modelProductoption->_delete($id);
        }
        
        $arrProductattribute = $this->modelProductattribute->_filter('product_option_id = ?', $id);
        if(isset($arrProductattribute))
            foreach($arrProductattribute as $Productattribute)
            {
                $this->modelProductattribute->_delete($Productattribute->product_attribute_id);
            }
            
        $arrProductoptionvalueoption = $this->modelProductoptionvalueoption->_filter('product_option_id = ?', $id);
        if(isset($arrProductoptionvalueoption))
            foreach($arrProductoptionvalueoption as $Productoptionvalueoption)
            {
                $this->modelProductoptionvalueoption->_delete($Productoptionvalueoption->product_option_value_option_id);
            }
            
        $this->_redirector->gotoUrl('productoption/index');
    }
    
    public function editAction(){
        $id = $this->_getParam('id','0');
        $Productoption = $this->modelProductoption->_find($id);                 //tìm kiếm theo sản phẩm theo id
        $formProductoption = new Application_Form_Productoption();              //tạo form mới để người dùng nhập dữ liệu
        
        if (!$this->getRequest()->isGet())                                      //nếu người dùng nhấn vào nút "đồng ý" hoặc refress lại trang
        {
            if(isset($Productoption))                                           //nếu có trong database tiếp tục xử lí
            {
                $formProductoption->product_option_id->setValue($id);

                $Cancel = $this->getRequest()->getPost('cancel', '0');          //bắt sự kiện Cancel nếu không có sự kiện sẽ được giá trị là 0
                if ($Cancel) {
                    $this->_redirector->gotoUrl('productoption/index');         //nếu có sự kiện cancel trở về trang index   
                }

                $formData = $this->getRequest()->getPost();                     //lấy dữ liệu vào biến $formData
                if ($formProductoption->isValid($formData)) { 

                    $Productoption->product_option_name = $formData['product_option_name']; //sửa đối tượng
                    
                    $id = $this->modelProductoption->_update($Productoption);   //update đối tượng
                    
                    $this->_redirector->gotoUrl('productoption/index');         //trả về index
                } else {                                                        
                    $formProductoption->populate($formData);                    //nếu dữ liệu nhập vào chưa đủ thì hiển thị lại thông tin đã nhập
                }                                                               //hàm populate dùng truyền hết dữ liệu trong $formData sang $formProductOption
            }                                                                   //dùng hiển thị cho người dùng biết đã nhập những gì.    
            else
            {
                $this->_redirector->gotoUrl('productoption/index');             //Không có trong database trở về trang index
                
            } 
            $this->view->form = $formProductoption;                             //gán form vừa tạo vào view
        }
        else                                                                    //lần đầu gọi tới ta sẽ gán giá trị của đối tượng lên form
        {       
            if(isset($Productoption))                                           //nếu đối tượng tồn tại
            {
                $UC = new Utility_Converter();                                  //tạo công cụ giúp đổi đối tượng thành mảng
                $formProductoption->populate($UC->objectToArray($Productoption));   //đổi đối tượng thành mảng rồi gán cho form vừa tạo
                $this->view->form = $formProductoption;
            }
            else
            {
                $this->_redirector->gotoUrl('productoption/index');   
            }
        }
        
    }
    
}